/*
 * File:   Scene.h
 * Author: Elevator
 *
 * Created on July 14, 2013, 5:19 PM
 */

#ifndef DATA_SCENE_H
#define DATA_SCENE_H

#include "Common/Common.h"

#include "Creature.h"
#include "Player.h"
#include "Map.h"
#include "Camera.h"

namespace data {

	class Scene {
	public:
		Scene(
			std::string name,
			std::string description,
			std::string mapFileName,
			const Camera* camera ) :
		_name( name ),
		_description( description ),
		_mapFileName( mapFileName ),
		_camera( camera )
		{
			_players = new Vector<Player>();
			_creatures = new Vector<const Creature*>();
		}

		~Scene()
		{
            delete _creatures;
            delete _players;
		}

		inline const std::string GetName( ) const { return _name; }
		inline void SetName( std::string name ) { _name = name; }

		inline const std::string GetDescription( ) const { return _description; }
		inline void SetDescription( std::string description ) { _description = description; }

		inline std::string GetMapFileName( ) const { return _mapFileName; }
		inline void SetMapFileName( std::string mapFileName ) { _mapFileName = mapFileName; }

		inline const Camera* GetCamera( ) const { return _camera; }
		inline void SetCamera( const Camera* camera ) { _camera = camera; }

		inline void AddPlayer( Player player ) { _players->Add(player); }
		inline void RemovePlayer( Player player ) { _players->Remove(player); }
		inline const IIterable<Player>* GetPlayers( ) const { return _players; }

		inline void AddCreature(const Creature* creature) { _creatures->Add(creature); }
		inline void RemoveCreature(const Creature* creature) { _creatures->Remove(creature); }
		inline const IIterable<const Creature*>* GetCreatures( ) const { return _creatures; }

	private:
		std::string _name;
		std::string _description;
		std::string _mapFileName;
		const Camera* _camera;

		Vector<Player>* _players;
		Vector<const Creature*>* _creatures;

	};
}
#endif	/* SCENE_H */
